package com.hzx.shoot;

import java.awt.*;
import java.awt.image.BufferedImage;

/*
 * 飞行物类  代表的是父类
 * */
public abstract class FlyingObject {
    //因为许多子类都有一样的所以在父类进行有参构造 方便子类调用
    //适用于hero sky bullet
    public FlyingObject(int x, int y, int wdith, int height) {
        this.wdith = wdith;
        this.height = height;
        this.x = x;
        this.y = y;
    }

    //这边进行方法的重载 因为有些子类不需要实时传入x和y 是确定的或者随机的
    //x和y是死的 不需要写活的不需要传参  适用于Bee airplane bingAirplane
    public FlyingObject(int wdith, int height) {
        this.wdith = wdith;
        this.height = height;
        this.x = (int) (Math.random() * (World.WIDTH - this.wdith));
        //this.y = -this.height;
        this.y = this.height;
    }

    //设置游戏中飞行物的状态  所有飞行物的默认状态都是活的
    public int state = LIVE;//定义一个常量为活的状态
    public static final int LIVE = 0;//使用常量的原因是因为一开始就是活着或者死
    //声明死的状态 并且为常量值  加载优先于成员变量
    public static final int DEAD = 0;
    public static final int REMOVE = 0;//可移除状态【飞行物移除】
    //宽高表示大小
    public int wdith;
    public int height;
    //位置
    public int x;
    public int y;

    //飞行物获取图片 看成一个方法  因为不同子类的获取的图片不一样 所以定义为抽象的方法
    //到具体的子类里面在进行重写  所以也把类变为抽象的类
    public abstract BufferedImage getImage();

    //飞行物的移动的抽象方法
    public abstract void step();

    /*
     * 画飞行物的方法
     * */
    public void paint(Graphics g) {
        g.drawImage(this.getImage(), this.x, this.y, null);
    }
}
